<?php
namespace app\application\home;
use app\common\controller\Common;
use think\Db;

class Projectcontroller extends Common
{
    private $check_money='1000';//审核金额
    private $table='oa_apply_project';//审核项目表

    //增加申请项目
    public function add()
    {

           //实例化model类
           $Model=model('Projectmodel');
           //将项目申请写入数据库
           //申请时间
           $_POST['apply_time']=time();
                //编号
           $_POST['check_num']=time().'abcd';
           //如果表单数据post过来必须带有此项目名称对应的id，也就是对应oa_apply_project数据表的字段flow_id
           //根据post过来的flow_id寻找此oa_flow_rule表中项目的规则,比如是否有金额的限制还是顺序是否为空等等
           $res=Db::table('oa_flow_rule')->where(['flow_id'=>$_POST['flow_id']])->select();//
           //整个项目流程是根据金额或者审核人先后顺序来进行审核的

        /******************金额规则审核人id*****start******************/
            //二维数组第一个money_limit>0是真就说明是按金额排序
            //避免非金额排序调用moneyRule()
           if($res[0]['money_limit']>0){
               //获取此项目的金额规则审核人id.
               $data=$this->moneyRule($res,$_POST['money']);
               $_POST['checker_id']=$data['checker_id'];
               //checker_id和review_id是一样的,但是当审核人审核后checker_id将会删除,所以review_id是做备份
               $_POST['review_id']=$data['checker_id'];
               //1.表示金额规则,2.表示顺序规则,用于读取审核人对应的项目方便判断
               $_POST['rule_id']=$data['rule_id'];

           }
        /******************金额规则审核人id******end*****************/

        /*******************审核人顺序规则id*********start*****************************/
          //如果money_limit==0说明是按审核人顺序
           if($res[0]['money_limit']==0){
                //审核人顺序规则只有1条数据.无需像金额规则进行循环读取
               //这条数据checker_id的审核人id必须按照顺序排列比如第一个审核的就排在第一个如12345,不可以像32541排列
               $_POST['checker_id']=$res[0]['checker_id'];
               //checker_id和review_id是一样的,但是当审核人审核后checker_id将会删除,所以review_id是做备份
               $_POST['review_id']=$res[0]['checker_id'];
               //1.表示金额规则,2.表示顺序规则,用于读取审核人对应的项目方便判断
               $_POST['rule_id']=$res[0]['rule_id'];
           }
        /*******************审核人顺序规则id*********end*****************************/
           //将项目写入数据库
           if($Model->insert($_POST)){
               echo json_encode(['info'=>'ok']);
           }else{
               echo json_encode(['info'=>'fail']);
           }



    }
    //获取是哪些人审核此项目，在申请项目的时候显示此项目的审核人
    public function getChecker()
    {

         //获取项目id查询，用作筛选出此项目审核人有哪几位。
         $flow_id=$_POST['flow_id'];
         $arr=array();
         //获取全部审核人并且获取到此人审核哪些项目。
         $res= Db::table('oa_checker_list')->select();

        //查询项目对应的审核人
         foreach ($res as $v){
              //如果项目ID存在$v['flow_id']中此人就负责此项目，查询出来。
               if(strstr($v['flow_id'],$flow_id))
                    //审核人的id和审核人姓名
                $arr[]=[$v['checker_name'],$v['checker_id']];
         }

         //如果数组不为空则表示有审核人存在
         if(!empty($arr)){
             //将数据写入web页面的隐藏的input中，用做项目审核判断
             echo json_encode($arr);
         }else{
             //无审核人
             echo json_encode(['info'=>'0']);
         }
    }


    //查看未审核的项目需要进行以下判断
    /*
     * 1.获取当前登录审核人id
     * 2.查询项目checker_id是否含有这个id，如果有就说明未审核，因为审核过后就会替换ID为审核人姓名
     * */
    //未审批项目列表
    public function checkIngList(){
        //ajax传送审核人登录后的姓名$_POST['checker_name']
        $checker_name='江副所长';
        //获取审核人id
        $res=Db::table('oa_checker_list')->field(['checker_id'])->where('checker_name','=',$checker_name)->find();
        //int类型改为字符串用作查询
        $res['checker_id']=(string)$res['checker_id'];
        //获取未审批的项目信息
        $no_check_project_data=Db::table('oa_apply_project')
            ->field(['id','checker_id','flow_id','pic_path','apply_time','rule_id'])
            ->where('apply_status','=',0)
            ->select();
//        //获取项目审核规则id
//        $rule_id=Db::table('oa_rule_name')->select();
           //rule_id的含义1:金额规则,2:审核人顺序规则
           $money_data=[];
           $order_data=[];
           foreach ($no_check_project_data as $project_v){
                  switch ($project_v['rule_id']){
                          //1:金额规则 使用strstr查询项目审核id是否有审核人id就行。
                      case '1':
                          //查询审核人是否在项目id中
                          if(strstr($project_v['checker_id'],$res['checker_id'])){
                              $money_data[]=$project_v;
                          }
                          break;
                          //2:审核人顺序规则,使用subst截取第一个字符串,因为顺序规则字符串按顺序来，第一个字符串就是当前是该谁审核了
                      case '2':
                          if(substr($project_v['checker_id'],0,1)== $res['checker_id']){
                              $order_data[]=$project_v;
                          }



                  }

        }
        $final_data=array_merge($money_data,$order_data);
           print_r($final_data);


//        //因为$v['checker_id']是字符串，所以查询此字段中是否含有$res['checker_id']，这个必须定义为字符串。
//        foreach ($no_checker_project_data as $v){
//            //字符串查询
//             if(strstr($v['checker_id'],$res['checker_id'])){
//                 $data[]=$v;
//             }
//        }
//        print_r($data);
        //查询字段
//        $filed=['id','checker_id','flow_id','money','pic_path','apply_time'];
//        /****查询条件***start**/
//        //如果审核状态为0并且金额小于1000,而且checker_id这个字段等于1那就说明是单独审核
//        $single=['apply_status'=>0,'money'=>['lt',$this->check_money]];
//        //如果审核状态为0并且金额大于1000,且不是工程款支付,而且checker_id这个字段有此人的id那就说明是两人一起审核
//        $double  =['apply_status'=>0,'money'=>['gt',$this->check_money],'flow_id'=>['neq','3']];
//        //如果审核状态为0,且flow_id=3说明是工程款那么就先A审核再B审核
//        $AB=['apply_status'=>0,'flow_id'=>3];
//        /****查询条件***end***/
//        $S=$this->getCheckProject($single,$filed,1);
//        $D=$this->getCheckProject($double,$filed,$res['checker_id']);
//        $AB=$this->getCheckProject($AB,$filed,$res['checker_id']);
//        $arr=[];
//        if(!empty($AB)){
//            foreach ($AB as $v){
//                //因为A审核人审核后就会删除A的checker_id字段自己的ID，那么最后审核的B就剩下一个字符串了，如果相同就拿出数据来审核。
//                //如果当前登录人的ID与cheker_id的字段相同就说明是最后的B审核人。
//                if($v['checker_id']==$res['checker_id']){
//                    echo 'a';
//                    $arr[]=$v;
//                }
//                if($v['checker_id']!=$res['checker_id']){
//                    echo 'b';
//                    $arr[]=$v;
//                }
//            }
//
//        }
//        if(!empty($S)) echo json_encode($S);
//        if(!empty($D)) echo json_encode($D);
//        if(!empty($arr)) echo json_encode($arr);

//          $alldata=array_merge($S,$D,$arr);


    }
    /*
     * @param table                 (string)   查询表
     * @param where                 (array)    查询条件
     * @param field                 (array)    查询字段
     * @parsm checker_id            (string)   审核人ID
     *
     * */
    private function getCheckProject($where,$field,$checker_id){
        //查询项目申请表oa_apply_project的checker_id字段是否含有审核人id
        /*
         * 查询所有未审核的，apply_status等于0
         *
         *  */
        $no_check_project_data=Db::table($this->table)
            ->field($field)
            ->where($where)
            ->select();
        $data=[];
        //因为$v['checker_id']是字符串，所以查询此字段中是否含有$res['checker_id']，这个必须定义为字符串。
        foreach ($no_check_project_data as $v){
            //字符串查询
            if(strstr($v['checker_id'],$checker_id)){
                $data[]=$v;
            }
        }
        return $data;
    }

    //查询post数据过来的项目名称是否是按金额大小审核排序
    private function moneyRule($flow_rule_result,$apply_project_money){
           foreach ($flow_rule_result as $v){
               //$v['act'] 判断大小
               switch ($v['act']){
                   //判断项目金额与规定的金额大小,如果为真就获取此规则下的审核人id
                   case '>':
                       if($apply_project_money>=$v['money_limit']){
                           $checker_id=['checker_id'=>$v['checker_id'],'rule_id'=>$v['rule_id']];
                       }
                       break;
                   case '<':
                       if($apply_project_money<=$v['money_limit']){
                           $checker_id=['checker_id'=>$v['checker_id'],'rule_id'=>$v['rule_id']];
                       }
                       break;
               }
           }
           //返回审核人id
           return $checker_id;

    }


}

?>